package classreflex;

import java.lang.reflect.Method;

/**
 * 利用Calss类的实例（反射）操作运行时类的方法
 *
 * @author 15594
 */
public class MethodTest {
    public static void main(String[] args) throws Exception {
        Class<Person> personClass = Person.class;
        Person person = personClass.newInstance();

        //1、通过getMethod（）操作，同样只能获取public类型的
        Method show = personClass.getMethod("show", int.class, String.class);

        show.setAccessible(true);
        //指定操作哪个对象的方法和传递参数，invoke（）返回值，即为方法的返回值
        String return1 = (String)show.invoke(person, 1, "、getMethod（）方式");
        System.out.println("方法值为："+return1);

        //2、通过
        Method show1 = personClass.getDeclaredMethod("show", int.class, String.class);
        show1.setAccessible(true);
        String return2 = (String) show1.invoke(person, 2, "、getDeclaredMethod（）方式");
        System.out.println(return2);

        //3、操作静态的方法
        Method setFirstName = personClass.getDeclaredMethod("setFirstName", String.class);
        setFirstName.setAccessible(true);
        setFirstName.invoke(null, "陈");
        Method getFirstName = personClass.getDeclaredMethod("getFirstName");
        String return3 = (String) getFirstName.invoke(null);
        System.out.println(return3);

    }
}
